@echo off
chcp 65001 >nul
title 测试 WakeLock 后台持续运行
color 0A

cls
echo.
echo ████████████████████████████████████████████
echo █                                          █
echo █   WakeLock + 前台服务 = 完美后台运行    █
echo █                                          █
echo ████████████████████████████████████████████
echo.
echo 🔋 WakeLock 功能：
echo   ✅ 保持 CPU 运行（即使锁屏）
echo   ✅ 确保协程不被暂停
echo   ✅ 100%% 保证后台持续更新
echo.

timeout /t 3 >nul

echo ════════════════════════════════════════════
echo  步骤 1/5：编译安装
echo ════════════════════════════════════════════
echo.

call gradlew assembleDebug --console=plain

if errorlevel 1 (
    echo ❌ 编译失败
    pause
    exit /b 1
)

echo.
echo ✅ 编译成功
echo.

adb install -r app\build\outputs\apk\debug\app-debug.apk

if errorlevel 1 (
    echo ❌ 安装失败
    pause
    exit /b 1
)

echo ✅ 安装成功
echo.

echo ════════════════════════════════════════════
echo  步骤 2/5：授予权限
echo ════════════════════════════════════════════
echo.

adb shell appops set com.example.munidingwei android:mock_location allow
adb shell pm grant com.example.munidingwei android.permission.ACCESS_FINE_LOCATION 2>nul
adb shell pm grant com.example.munidingwei android.permission.ACCESS_COARSE_LOCATION 2>nul
adb shell pm grant com.example.munidingwei android.permission.POST_NOTIFICATIONS 2>nul

echo ✅ 所有权限已授予
echo.

echo ════════════════════════════════════════════
echo  步骤 3/5：启动应用
echo ════════════════════════════════════════════
echo.

adb logcat -c
adb shell am start -n com.example.munidingwei/.MainActivity

timeout /t 3 >nul

echo ✅ 应用已启动
echo.

echo ════════════════════════════════════════════
echo  步骤 4/5：等待设置模拟位置
echo ════════════════════════════════════════════
echo.
echo 📱 请在手机上：
echo   1. 点击地图任意位置
echo   2. 等待地址显示
echo   3. 确认通知栏有"模拟定位运行中"
echo.
echo 设置完成后按任意键继续...
pause >nul

echo.
echo ════════════════════════════════════════════
echo  步骤 5/5：监控日志（关键！）
echo ════════════════════════════════════════════
echo.

start "WakeLock 日志监控 - 每秒一次输出" cmd /k "color 0B && echo ╔════════════════════════════════════════╗ && echo ║  WakeLock 日志监控 - 观察更新次数     ║ && echo ╚════════════════════════════════════════╝ && echo. && adb logcat -s LocationForegroundService:D | findstr /C:位置更新成功 /C:WakeLock /C:后台持续运行"

timeout /t 2 >nul

echo.
echo ┌────────────────────────────────────────┐
echo │  测试步骤（非常重要！）                │
echo └────────────────────────────────────────┘
echo.
echo  第 1 步：观察前台运行
echo  ────────────────────────────────
echo  日志窗口应该每秒显示：
echo  "🔥 [1] 位置更新成功 - 后台持续运行中！"
echo  "🔥 [2] 位置更新成功 - 后台持续运行中！"
echo  "🔥 [3] 位置更新成功 - 后台持续运行中！"
echo  ...
echo.
echo  ✅ 如果看到，说明前台运行正常
echo.

pause

echo.
echo  第 2 步：退到后台（关键测试！）
echo  ────────────────────────────────
echo.
echo  现在请：
echo  • 按手机 Home 键
echo  • 或切换到其他应用（如微信、百度地图）
echo.
echo  👀 重点观察日志窗口！
echo.
echo  ✅ 应该继续每秒输出：
echo     "🔥 [10] 位置更新成功 - 后台持续运行中！"
echo     "🔥 [11] 位置更新成功 - 后台持续运行中！"
echo     ...
echo.
echo  ✅ 更新次数应该持续增加
echo.
echo  ❌ 如果日志停止，说明后台被暂停了
echo.

pause

echo.
echo  第 3 步：锁屏测试
echo  ────────────────────────────────
echo.
echo  现在请：
echo  • 锁定手机屏幕（按电源键）
echo  • 等待 30 秒
echo  • 解锁查看日志
echo.
echo  ✅ 日志应该继续更新
echo  ✅ 更新次数应该增加约 30 次
echo.
echo  💡 这就是 WakeLock 的作用！
echo     它确保即使锁屏，CPU 也保持运行
echo.

pause

echo.
echo  第 4 步：测试微信定位
echo  ────────────────────────────────
echo.

adb shell am force-stop com.tencent.mm
timeout /t 2 >nul
echo 启动微信...
adb shell am start -n com.tencent.mm/.ui.LauncherUI

echo.
echo ✅ 微信已启动
echo.
echo 请在微信中测试位置功能
echo 同时观察日志窗口是否持续更新
echo.

pause

echo.
echo ════════════════════════════════════════════
echo  诊断信息
echo ════════════════════════════════════════════
echo.

echo 检查 WakeLock 状态...
adb shell dumpsys power | findstr "Wake Locks"

echo.
echo 检查前台服务状态...
adb shell dumpsys activity services com.example.munidingwei | findstr "isForeground"

echo.
echo ════════════════════════════════════════════
echo  判断标准
echo ════════════════════════════════════════════
echo.
echo ✅ 成功的标志：
echo   • 日志每秒输出一次
echo   • 退后台后日志继续
echo   • 锁屏后日志继续
echo   • 更新次数持续增加
echo   • 微信能快速获取模拟位置
echo.
echo ❌ 失败的标志：
echo   • 退后台后日志停止
echo   • 更新次数不变
echo   • 微信获取不到位置
echo.
echo ════════════════════════════════════════════
echo  如果失败，可能的原因
echo ════════════════════════════════════════════
echo.
echo 原因1: 电池优化限制
echo   解决：设置 → 电池 → 电池优化
echo         → 找到"模拟定位应用"
echo         → 设置为"不优化"
echo.
echo 原因2: 后台运行限制（小米/华为）
echo   解决：设置 → 应用设置 → 应用管理
echo         → 模拟定位应用
echo         → 省电策略 → 无限制
echo.
echo 原因3: 自启动被禁用
echo   解决：设置 → 应用设置 → 应用管理
echo         → 模拟定位应用
echo         → 自启动 → 允许
echo.
echo 原因4: 通知被关闭（导致前台服务停止）
echo   解决：下拉通知栏，确保有
echo         "模拟定位运行中"通知
echo.
echo ════════════════════════════════════════════
echo.

echo 💡 提示：
echo   WakeLock 会消耗一定电量
echo   但对于模拟定位功能是必需的
echo   我们使用 PARTIAL_WAKE_LOCK
echo   只保持 CPU 运行，不点亮屏幕
echo   功耗相对较低
echo.
echo 测试完成！告诉我结果如何？ 🎯
echo.

pause

